from starlette.exceptions import HTTPException
from fastapi.responses import ORJSONResponse


async def http_exception(request, exc):
    if hasattr(exc, 'detail'):
        msg = exc.detail
    else:
        msg = exc
    return ORJSONResponse({"msg": msg}, status_code=exc.status_code)


# async def http_404_exception(request, exc):
#     return ORJSONResponse({"msg": exc.detail}, status_code=exc.status_code)
#
#
# async def http_500_exception(request, exc):
#     return ORJSONResponse({"msg": exc.detail}, status_code=exc.status_code)


# 自定义异常
class UnicornException(Exception):
    def __init__(self, name: str):
        self.name = name


async def unicorn_exception_handler(request, exc: UnicornException):
    return ORJSONResponse(
        status_code=402,
        content={"code": 402, "errmsg": f"{exc.name}失败"},
    )


exception_handlers = {
    HTTPException: http_exception,
    # 404: http_404_exception,
    # 500: http_500_exception,
    UnicornException: unicorn_exception_handler
}

__all__ = ["exception_handlers", "UnicornException"]
